package com.spring.demo8.eg3.factory;

import org.springframework.beans.factory.config.BeanDefinition;

/**
 * @author vhans
 */
public interface MyBeanDefinitionRegistry extends MyAliasRegistry {

    /**
     * 注册一个新的bean定义
     *
     * @param beanName       bean名称
     * @param beanDefinition bean定义
     */
    void regisBeanDefinition(String beanName, BeanDefinition beanDefinition);

    /**
     * 通过bean名称移除已注册的bean
     *
     * @param beanName bean名称
     */
    void removeBeanDefinition(String beanName);

    /**
     * 通过bean名称获取bean定义信息
     *
     * @param beanName bean名称
     * @return bean定义信息
     */
    BeanDefinition getBeanDefinition(String beanName);

    /**
     * 查看bean是否注册过
     *
     * @param beanName bean名称
     * @return 结果
     */
    boolean containBeanDefinition(String beanName);

    /**
     * 获取已经注册过的bean名称列表
     */
    String[] getBeanDefinitionNames();

    /**
     * 返回注册器中已注册过的bean数量
     */
    int getBeanDefinitionCount();

    /**
     * 确定给定的bean名称或者别名是否已在此注册表中使用
     *
     * @param beanName bean名称或者别名
     */
    boolean isBeanNameInUse(String beanName);
}
